#include "StreamBloqueante.h"
#include "MyException.h"
#include "const.h"

std::map<std::string, Mutex> StreamBloqueante::openFiles;

StreamBloqueante::StreamBloqueante(std::string &string, std::ios_base::openmode mode): path(string){
	openFiles[path].lockMutex();
	s.open(path.c_str(), mode);
	if (s.fail()) {std::cout << path << std::endl;throw MyException("No se pudo abrir el archivo requerido.\n");}
}
    //Al unwindear stack:
    // 1)cierra el stream.
    // 2) unlockea mutex
StreamBloqueante::~StreamBloqueante(){
	this->close();
}

void StreamBloqueante::close(){
	s.close();
	//TODO: borrar del mapa.
	openFiles[path].unlockMutex();
}

std::fstream& StreamBloqueante::stream(){
	return s;
}
